package com.example.mybatis_demo.test;

import com.example.mybatis_demo.dto.Address;
import com.example.mybatis_demo.dto.Goods;
import com.example.mybatis_demo.dto.User;
import com.example.mybatis_demo.mapper.AddressMapper;
import com.example.mybatis_demo.mapper.GoodsMapper;
import com.example.mybatis_demo.mapper.UserMapper;
import com.sun.xml.internal.bind.v2.model.core.ID;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <P> @Author: SongKeCheng
 * <P> Type: Class
 * <P> Description:
 * <P> Date: 2024/6/18:15:01
 */

@SuppressWarnings({"unchecked", ""})
@Slf4j
public class MybatisDemo {


    /**
     * 如果你使用了事务，并且事务没有被成功提交，那么删除操作不会生效。
     * 在自动提交模式下，通常每个 SQL 语句都会被当做一个单独的事务来执行。
     * 如果删除操作之前或之后发生了异常或者事务没有显式提交，那么数据库会自动回滚该事务，导致删除操作未能生效
     * <p>
     * <p>
     * 即使数据库连接池中的连接可能具有自动提交的默认设置，MyBatis 会在需要时显式地管理事务，而不受这些设置的影响
     */
    public static void main(String[] args) throws IOException {
        InputStream inputStream =
                Resources.getResourceAsStream("mybatis-config.xml");

        SqlSessionFactory factory = new
                SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();
        GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class);
        Goods goods = goodsMapper.findById(2);
        Goods good1s = goodsMapper.findById(3);


        session.close();

    }
}
